home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-07-26 | 9.7 KB | 219 lines | [TEXT/gamI] |
- COPYRIGHTS
- ----------
-
- For Thomas:
-
- ;* Copyright 1992 Digital Equipment Corporation
- ;* All Rights Reserved
- ;*
- ;* Permission to use, copy, and modify this software and its documentation is
- ;* hereby granted only under the following terms and conditions. Both the
- ;* above copyright notice and this permission notice must appear in all copies
- ;* of the software, derivative works or modified versions, and any portions
- ;* thereof, and both notices must appear in supporting documentation.
- ;*
- ;* Users of this software agree to the terms and conditions set forth herein,
- ;* and hereby grant back to Digital a non-exclusive, unrestricted, royalty-free
- ;* right and license under any changes, enhancements or extensions made to the
- ;* core functions of the software, including but not limited to those affording
- ;* compatibility with other hardware or software environments, but excluding
- ;* applications which incorporate this software. Users further agree to use
- ;* their best efforts to return to Digital any such changes, enhancements or
- ;* extensions that they make and inform Digital of noteworthy uses of this
- ;* software. Correspondence should be provided to Digital at:
- ;*
- ;* Director, Cambridge Research Lab
- ;* Digital Equipment Corp
- ;* One Kendall Square, Bldg 700
- ;* Cambridge MA 02139
- ;*
- ;* This software may be distributed (but not offered for sale or transferred
- ;* for compensation) to third parties, provided such third parties agree to
- ;* abide by the terms and conditions of this notice.
- ;*
- ;* THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- ;* WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
- ;* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- ;* CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- ;* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- ;* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- ;* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- ;* SOFTWARE.
-
- For MacGambit:
-
- MacGambit is copyright 1992-93 Universite de Montreal. Check
- the "About MacGambit" dialog box in the apple menu for details.
-
-
- THOMAS OVERVIEW
- ---------------
-
- Thomas is a compiler written at Digital Equipment Corporation's
- Cambridge Research Laboratory. Thomas compiles a language compatible
- with the language described in the book "Dylan(TM) an object-oriented
- dynamic language" by Apple Computer Eastern Research and Technology,
- April 1992.
-
- We have made every effort to minimize the differences between Thomas and
- Dylan(TM), and to remove bugs, but help from others would be greatly
- appreciated. The original development team consisted of:
-
- Matt Birkholz (Birkholz@crl.dec.com)
- Jim Miller (JMiller@crl.dec.com)
- Ron Weiss (RWeiss@crl.dec.com)
-
- In addition, Joel Bartlett (Bartlett@wrl.dec.com), Marc Feeley
- (Feeley@iro.umontreal.ca), Guillermo Rozas (Jinx@zurich.ai.mit.edu) and
- Ralph Swick (Swick@crl.dec.com) contributed time and energy to the initial
- release.
-
- Comments, questions, suggestions, help, etc. should be directed to:
- info-thomas@crl.dec.com
- Requests to be added to this mailing list should be sent to:
- info-thomas-request@crl.dec.com
-
- * * *
-
- In building Thomas, our goals (in order of priority) were:
-
- (1) To learn about the Dylan(TM) language, by building an implementation
- based solely on the description in the book.
-
- (2) To help others learn about the language by producing source code for an
- implementation that was well structured, easy to read, and was
- publically available (the source code can be obtained via anonymous
- FTP from crl.dec.com in the pub/DEC/Thomas directory).
-
- (3) To build a system we could use to actually write small Dylan(TM)
- programs, to get a feel for the language through using it.
-
- We feel we have met these three goals as well as can be expected in a four
- week project with three people. It was never our intention to produce an
- implementation that performs well, and Thomas has no optimizations of any
- kind. It does not perform well. This reflects our goals and not
- necessarily the design of the language itself.
-
- Thomas is NOT Dylan(TM). We have not received approval for the use of the
- trademark, and we have not received a copy of a test suite other than the
- examples from the book itself. We may, at some future date, pursue these
- issues with Apple. The Thomas system was built with no direct input, aid,
- assistance or discussion with Apple. All design and implementation
- decisions in Thomas reflect choices by the Thomas implementors based on
- reading the book published by Apple. These decisions must not be
- construed in any way as deriving from Apple Computer Corporation or its
- employees.
-
-
- KNOWN PROBLEMS IN THOMAS
- ------------------------
-
- I. Known differences from the book "Dylan(TM) an object-oriented
- dynamic language" by Apple Computer Eastern Research and
- Technology, April 1992.
-
- 1) In order to use Scheme's READ to handle Thomas expressions, Thomas
- uses !key and !rest wherever the Dylan(TM) book uses #key or #rest.
-
- 2) Thomas variable names are restricted to the subset of Scheme names
- that don't start with "!" or "dylan:". This avoids name clashes
- between user variable names and compiler-generated variables.
-
- 3) Thomas doesn't remember the initial case of symbols, since it
- inherits the case from the underlying Scheme system. Thus some
- implementations of Thomas store symbols in upper case, some in
- lower case, and some preserve case. All implementations are
- otherwise case-insensitive for symbols, keywords and variable
- names.
-
- 4) Thomas doesn't fully handle sealed classes, abstract classes, or
- read-only module variables.
-
- 5) Thomas doesn't support the REMOVE-SLOT operation. We don't really
- understand the full intent of this operation in a variety of
- circumstances.
-
- 6) Thomas doesn't do collection alignment for tables (as specified on
- pages 128 and 129); other collection types should be OK. Fixing
- this would be a very nice contribution to the Thomas implementation
- (hint, hint).
-
- 7) Thomas doesn't do (SETTER DIRECT-SUPERCLASSES). This is somewhere
- between an oversight (we honestly didn't notice it and it isn't in
- the index) and a pain to write. Again, help would be appreciated.
-
- 8) Thomas doesn't do virtual slots in a way that supports their use as
- "filtered slots" as described on pages 58 and 59. We find the
- description confusing, and require implementors to allocate an
- object of the supertype to store the "hidden" slot value rather
- than relying on NEXT-METHOD to find the hidden slot in the object
- itself.
-
- 9) Some implementations of Scheme do not recognize the same set of literal
- character names as specified in the book. IEEE Scheme requires the
- character literals #\space and #\newline. Dylan also specifies
- #\rubout, #\page, #\tab, #\backspace, #\return, and #\linefeed.
-
- II. Additions to the Thomas language
-
- Thomas provides four methods not mentioned in Dylan(TM):
-
- (display <object>) derived from Scheme's DISPLAY
- (newline) derived from Scheme'S NEWLINE
- (print <object>) same as write-line
- (write-line <object>) NEWLINE, then WRITE <object>
-
- The MacGambit version of Thomas includes four additional predefined
- methods:
-
- (PP <object>) calls the Scheme pretty printer. Useful to see the
- Scheme code that was generated for a method.
-
- (SCHEME-VARIABLE <symbol>) returns the value of a Scheme variable
- that is visible from the normal user interaction environment.
- This can be used to access any Scheme object, but results are
- unpredictable unless the object has a type that corresponds to
- one of the non-procedural Thomas types. Common types that can
- be accessed this way are booleans, symbols, strings, numbers,
- the empty list, as well as vectors or lists composed of these.
-
- (SCHEME-PROCEDURE <symbol>) also returns the value of a Scheme
- variable that is visible from the normal user interaction
- environment. It assumes (without checking) that it is
- applicable and converts it to a Thomas method. From within
- Thomas it will appear to take an arbitrary number of arguments,
- but will issue an error if the number supplied doesn't match
- the number expected by the Scheme procedure.
-
- (LOAD <string>) loads a file containing Thomas code. The file is
- first compiled into a Scheme program, which is then loaded with
- Scheme's predefined load procedure.
-
-
- THOMAS 1.1 RELEASE NOTES
- ------------------------
-
- Thomas version 1.1 contains the following changes from version 1.0:
-
- * sorted-applicable-methods now uses a new topological sort that uses a
- number we call "class specificity". Intuitively, class specificity
- increases every time a class is specialized to produce a subclass.
- Computationally, class specificity is the largest number of subclass links
- between <object> and the class. For example, consider this class
- heterarchy:
-
- <object> specificity = 0
- / | \
- <a> <b> <c> specificity = 1
- \ / /
- <d> / specificity = 2
- \ /
- <e> specificity = 3
-
- Thus, during method dispatch on an object of type <d>, Thomas considers
- methods specialized by class <d> to be more specific than those specialized
- by <a> or <b>, which are in turn more specific than any specialized by
- <object>. Notice that the ordering of methods specialized by <a> and <b>
- is not specified. Methods specialized on <e> or <c> are not applicable
- because <d> is not a subclass of either.
-